package com.deluxelx.soul.inn.service.course;

import com.baomidou.mybatisplus.extension.service.IService;
import com.deluxelx.soul.inn.bean.course.Course;
import com.deluxelx.soul.inn.bean.course.CourseDTO;
import com.deluxelx.soul.inn.bean.course.CourseDetailVO;
import com.deluxelx.soul.inn.bean.course.CourseVO;
import com.deluxelx.soul.inn.common.param.CollectedParam;

import java.util.List;

/**
 * 课程服务接口类
 *
 * @author: zihao.liao
 * @date: 2024/1/15 17:01
 */
public interface CourseService extends IService<Course> {
    /**
     * 查询首页课程列表
     * @return List<CourseVO> 首页课程列表
     */
    List<CourseVO> fetchIndexCourseList();
    /**
     * 查询我的收藏课程
     *
     * @param userId 用户Id
     * @return 课程列表
     **/
    List<CourseVO> fetchMyFollowCourse(String userId);
    /**
     * 根据关键字查询课程列表
     *
     * @param keyword 关键字
     * @return List<CourseVO> 课程列表
     */
    List<CourseVO> fetchSearchCourseList(String keyword);
    /**
     * 根据咨询师id查询课程列表
     *
     * @param counselorId 咨询师id
     * @return List<CourseVO> 课程列表
     */
    List<CourseVO> fetchCourseListByCounselor(String counselorId);
    /**
     * 根据首页导航栏类型查询课程列表
     *
     * @param typeId 类型
     * @return 课程列表
     **/
    List<CourseVO> fetchCourseListByType(String typeId);
    /**
     * 获取课程详情
     *
     * @param courseId 课程id
     * @return 课程详情
     **/
    CourseDetailVO fetchCourseDetail(String courseId);
    /**
     * 查看该用户是否收藏此课程
     *
     * @param param 课程id
     * @return 结果
     */
    Boolean isCollectCourse(CollectedParam param);
    /**
     * 该用户点击关注课程
     * @param param 前端传参
     * @return 结果
     */
    Boolean followCourse(CollectedParam param);
    /**
     * 该用户点击取消关注课程
     * @param param 前端传参
     * @return 结果
     */
    Boolean unFollowCourse(CollectedParam param);
    /**
     * 添加课程
     *
     * @param param 课程参数
     * @return 主键id
     **/
    String saveCourse(CourseDTO param);
    /**
     * 修改课程
     *
     * @param param 课程参数
     * @return 结果
     **/
    Boolean modifyCourse(CourseDTO param);
    /**
     * 删除课程
     *
     * @param courseId 课程id
     * @return 结果
     */
    Boolean removeCourse(String courseId);
}
